package com.juzipi.demo.utils;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String url;
    private static String username;
    private static String password;
    private static String driver;
    /**
     * 文件的读取，只需要读取一次就能拿到这些值,使用静态代码块
     */
    static {
        //读取资源文件，获取值
        //创建Properties集合类
        Properties properties = new Properties();

        //获取src路径下的文件的方式---> ClassLoader 类加载器
        ClassLoader classLoader = JDBCUtils.class.getClassLoader();
        //URL 表示统一资源标识符
        URL resource = classLoader.getResource("jdbc.properties");
        //获取字符串路径
        String path = resource.getPath();

//        System.out.println(path);


        //加载文件
        try {
//            properties.load(new FileReader("D:\\SpringBootLearning\\springboot\\springboot-jdbc\\src\\main\\resources\\jdbc.properties"));
            properties.load(new FileReader(path));
            //获取属性，赋值
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            driver = properties.getProperty("driver");
            //注册驱动
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /*
    工具类，简化书写
    1.抽取一个方法获取连接对象
        不想传递参数（太麻烦），还得保证工具类的通用性
        解决：通过配置文件
    2.抽取一个方法释放资源
     */

    /**
     * 获取连接
     * @return 连接对象
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url,username,password);
    }


    /**
     * 释放资源（Update）
     * @param statement
     * @param connection
     */
    public static void close(Statement statement,Connection connection){
        if (statement != null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (connection != null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }


    /**
     * 释放资源（Query）
     * @param resultSet
     * @param statement
     * @param connection
     */
    public static void close(ResultSet resultSet,Statement statement, Connection connection){
        if (resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (statement != null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if (connection != null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
